package com.algorithm.ch1.cjm.math;

import java.util.ArrayList;
import java.util.List;

/**
 * 写一个程序，输出从 1 到 n 数字的字符串表示。
 * <p>
 * 1. 如果 n 是3的倍数，输出“Fizz”；
 * <p>
 * 2. 如果 n 是5的倍数，输出“Buzz”；
 * <p>
 * 3.如果 n 同时是3和5的倍数，输出 “FizzBuzz”。
 *
 * @Author: Jie Ming Chen
 * @Date: 2018/9/13
 * @Version 1.0
 */
public class FizzBuzz {

    /**
     * @param n
     * @return
     */
    public List<String> fizzBuzz(int n) {

        List<String> strings = new ArrayList<>();

        int index = 1;
        StringBuffer sb = null;
        while (index <= n) {

            sb = new StringBuffer();
            if (index % 3 == 0) {
                sb.append("Fizz");
            }
            if (index % 5 == 0) {
                sb.append("Buzz");
            }
            if (sb.length() == 0) {
                strings.add(index + "");
            } else {
                strings.add(sb.toString());
            }
            index++;
        }
        return strings;
    }


    public List<String> fizzBuzz1(int n){

        return new java.util.AbstractList<String>() {

            @Override
            public int size() {
                return n;
            }

            @Override
            public String get(int val) {
                val++;
                if (val % 15 == 0) {
                    return "FizzBuzz";
                } else if (val % 3 == 0) {
                    return "Fizz";
                } else if (val % 5 == 0) {
                    return "Buzz";
                } else {
                    return val + "";
                }
            }
        };

    }


    public static void main(String[] args) {
        new FizzBuzz().fizzBuzz(3);

        System.out.println(new FizzBuzz().fizzBuzz1(3).toString());
    }
}
